package cn.com.lc.Check;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;

/**
 * 简单测试框架
 *
 * 当主方法执行后，会自动自行被检查的所有方法（加了Check注解的方法），判断方法是否有异常，记录到文件中
 */
public class TestCheak {
    public static void main(String[] args) throws IOException {
        Calculator calculator=new Calculator();
        Class<? extends Calculator> aClass = calculator.getClass();
        Method[] methods = aClass.getMethods();
        int number=0;
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.text"));//生成文件
        for (Method method : methods) {
            if(method.isAnnotationPresent(Cheak.class)){
                try {
                    method.invoke(calculator);
                } catch (Exception e) {
                    number++;
                    bw.write("------------------------------------");
                    bw.newLine();
                    bw.write(method.getName()+"方法出异常了！");
                    bw.newLine();
                    bw.write("异常的简短名称： "+e.getCause().getClass().getSimpleName());
                    bw.newLine();
                    bw.write("异常的全部名称： "+e.getCause().getClass().getName());
                    bw.newLine();
                    bw.write("异常的原因： "+e.getCause().getMessage());
                    bw.newLine();
                    bw.write("------------------------------------");
                    bw.newLine();
                }
            }

        }

        bw.write("本次实验出现 "+number+" 次异常！");
        bw.flush();
        bw.close();

        /**
         *  1.创建计算器类对象
         *         2.获取字节码文件对象
         *         3.获取所有方法
         *         4.方法上是否有Check注解
         *         5.有，执行
         *         6.捕获异常
         */
    }
}
